package com.java.onlineshop.pojo;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

/**
 * @program: onlineshop
 * @description: 购物车
 * @author: ShuangChenYue
 * @create: 2021-06-09 21:07
 **/
public class ShopCart
{
    private Map items = new HashMap();
    //定义添加方法，主要是传进来一个orderItem，将其添加进shopCart
    public void add(OrderItem orderItem)
    {
        //传进来一个orderItem的对象
        //再从传进来的orderItem对象中拿到product的id
        Integer productid = orderItem.getProduct().getId();
        //再根据该id判断购物车的item中是否有该商品id所对应的orderitem。因为key值为商品id，value值为orderitem
        OrderItem orderLine = (OrderItem) items.get(productid);
        //若购物车map集合中没有该orderitem对象。则将其添加进去
        if (orderLine == null)
        {
            items.put(productid,orderItem);
        }else
        {
            //若购物车map中有该map集合，则得到其以前数量，和现在的数量相加
            orderLine.setAmount(orderLine.getAmount()+orderItem.getAmount());
            //再重新存入map
            items.put(productid,orderLine);
        }
    }

//=================================================该方法是为了得到orderitem的数量============================================
    public int getCount()
    {
        //先初始化一个count
        int count = 0;
        //得到items集合中所有的key并返回为一个set集合
        Set set = items.keySet();
        //而后迭代该set集合
        Iterator iterator = set.iterator();
        while (iterator.hasNext())
        {
            Integer id = (Integer) iterator.next();//迭代得到所有的key（即productid）
            //而后通过该id得到id所对应的product对象
            OrderItem orderItem = (OrderItem) items.get(id);
            //而后将orderitem中的amount加给count
            count += orderItem.getAmount();
        }
        return count;
    }
//=================================================该方法是为了得到订单总价钱==============================================
    public  double   getTotal(){
        double total = 0;
        Set  set = items.keySet();
        Iterator iterator = set.iterator();
        while(iterator.hasNext()){
            Integer id =(Integer)iterator.next();
            OrderItem orderItem = (OrderItem) items.get(id);
            total += orderItem.getProduct().getBaseprice() * orderItem.getAmount();
        }
        return  total;
    }
//=======================================================数量更新===========================================================
    public void modify(OrderItem orderItem)
    {
        Integer productid = orderItem.getProduct().getId();
        items.put(productid,orderItem);
    }


//=======================================================该方法为了得到items==============================================
    public Map getItems()
    {
        return items;
    }

//====================================================删除orderitem方法==================================================
    public void remove(OrderItem orderItem)
    {
        //调用该方法，会传进来一个orderitem
        Integer id = orderItem.getProduct().getId();
        items.remove(id);
    }
//====================================================根据id删除/重载====================================================
    public void  remove(int productid)
    {
        items.remove(productid);
    }
//====================================================清除购物车中所有东西================================================
    public void clearAll()
    {
        items.clear();
    }
}

